'''参考 https://www.cnblogs.com/listenfwind/p/10280392.html'''
'''Apriori的作用是根据物品间的支持度找出物品中的频繁项集'''

import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori

dataset = [['牛奶', '洋葱', '肉豆蔻', '芸豆', '鸡蛋', '酸奶'],
           ['莳萝', '洋葱', '肉豆蔻', '芸豆', '鸡蛋', '酸奶'],
           ['牛奶', '苹果', '芸豆', '鸡蛋'],
           ['牛奶', '独角兽', '玉米', '芸豆', '酸奶'],
           ['玉米', '洋葱', '洋葱', '芸豆', '冰淇淋', '鸡蛋']]

te = TransactionEncoder()
# 进行 one-hot 编码  #TransactionEncoder类似于独热编码，每个值转换为一个唯一的bool值
te_ary = te.fit(dataset).transform(dataset)
df = pd.DataFrame(te_ary, columns=te.columns_)

# 利用 Apriori 找出频繁项集
freq = apriori(df, min_support=0.6, use_colnames=True)
'''apriori参数如下：
df：这个不用说，就是我们的数据集。
min_support：给定的最小支持度。
use_colnames：默认False，则返回的物品组合用编号显示，为True的话直接显示物品名称。
max_len：最大物品组合数，默认是None，不做限制。如果只需要计算两个物品组合的话，便将这个值设置为2。'''

print(te.columns_)  #列的顺序
print(te_ary)       #编码后的数据
print(freq)         #设定的最小支持度是0.6，那么只有支持度大于0.6的物品集合才是频繁项集